Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

The maximum number of tables in a query (260) was exceeded.

Îåêßíçóå áðü ôï ìÝëïò Bill . Τελευταία δημοσίευση από το μέλος Bill στις 25-02-2011, 18:39. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-02-2011, 11:56 63739

    The maximum number of tables in a query (260) was exceeded.

    error : Could not allocate ancillary table for view or function resolution. The maximum number of tables in a query (260) was exceeded. 
    πως μπορώ να το αντιμετωπίσω σε sql 2000 ? (χωρίς να σβήσω joins και fields)

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  25-02-2011, 12:08 63744 σε απάντηση της 63739

    Απ: The maximum number of tables in a query (260) was exceeded.

    Δεν μπορώ να σε βοηθήσω, αλλά τι αποτελέσματα βγάζει αυτό το query αν επιτρέπεται;

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  25-02-2011, 12:11 63745 σε απάντηση της 63739

    Απ: The maximum number of tables in a query (260) was exceeded.

    Να σβήσεις joins και fields. Χωρίς πλάκα. Είναι παράλογο να χρησιμοποιείς τόσους πίνακες σε ένα query. Για να μαντέψω, χρησιμοποιείς views τα οποία χρησιμοποιούν άλλα views, τα οποία χρησιμοποιούν άλλα views μέχρι που φτάνεις τα 260 nested views? Τα οποία views μάλιστα έχουν γραφτεί από άλλους και κανείς δεν θυμάται τί γίνεται? Να μαντέψω κι ότι δουλεύεις για χρηματιστηριακό software :P

    Θα πρέπει να καθαρίσεις την SQL σου και να μιλήσεις απευθείας στους πίνακες, ή να φτιάξεις views τα οποία μιλάνε στους πίνακες, και όχι το ένα view με άλλο view. Αν το θηρίο query αφορά reporting, σπάστο σε βήματα και αποθήκευσε τα αποτελέσματα κάθε βήματος σε ένα temp πίνακα. Έτσι θα είναι ευκολότερο να διαχειριστείς τα δεδομένα, θα υπάρχει καλύτερο query optimization και το query σου απλά θα εκτελεστεί πολύ γρηγορότερα.

    Πριν αρχίσεις να ψάχνεις για quickfixes για να κουκουλώσεις το πρόβλημα, θα πρέπει να έχεις υπόψη ότι το αρχικό όριο ήταν 256 και ανέβηκε στα 260 μετά από κάποιο Service Pack του 2000. Ήδη έχεις το μόνο quickfix που βγήκε ποτέ.

    Επίσης, σκέψου ότι ρωτάς και για ένα νεκρό (end-of-life) προϊόν. Δεν υπάρχει περίπτωση να ξαναβγεί fix για οποιοδήποτε bug (ή μη-bug όπως το 260) για τον 2000.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-02-2011, 12:45 63759 σε απάντηση της 63745

    Απ: The maximum number of tables in a query (260) was exceeded.

    Παναγιώτης Καναβός:

    Πριν αρχίσεις να ψάχνεις για quickfixes για να κουκουλώσεις το πρόβλημα, θα πρέπει να έχεις υπόψη ότι το αρχικό όριο ήταν 256 και ανέβηκε στα 260 μετά από κάποιο Service Pack του 2000. Ήδη έχεις το μόνο quickfix που βγήκε ποτέ.


    Αυτό είναι το link gia το συγκεκριμενο fix, στο οποίο συμβουλεύουν οτι αν ξεπεράσεις και το 260, θα πρέπει να κάνεις αυτά που λέει και ο Παναγιώτης: http://support.microsoft.com/kb/828269



    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  25-02-2011, 16:59 63776 σε απάντηση της 63745

    Απ: The maximum number of tables in a query (260) was exceeded.

    έχετε δίκιο ότι είναι κακοφτιαγμένο . Όμως δεν έχει views μεσα σε views μιλά απευθείας στους πίνακες . Το θέμα είναι έχει joins σε ίδιο πίνακα για να πάρει ποσο με διαφορετικό ID_TYPE. πχ


      LEFT JOIN (SELECT key1,key2,key3,SUM(p.POSO) as M_POSO 
                       FROM t1
                       where t1.id_xx in(1,2,3)
                        GROUP BY key1,key2,key3)
                        m1 on m1.key1=L1.key1 and m1.key2=L1.key2 and m1.key3=L1.key3
      LEFT JOIN (SELECT key1,key2,key3,SUM(p.POSO) as N_POSO 
                       FROM t1
                       where t1.id_xx in(5,6,7)
                        GROUP BY key1,key2,key3)
                        m2 on m2.key1=L1.key1 and m2.key2=L1.key2 and m2.key3=L1.key3



    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  25-02-2011, 17:23 63777 σε απάντηση της 63776

    Απ: The maximum number of tables in a query (260) was exceeded.

    Και αυτό επαναλαμβάνεται άλλες 258 φορές??? Και δεν απάντησες στην ερώτηση για τα χρηματιστηριακά Stick out tongue

    Αν αυτό το ID_XX είναι το ίδιο σε όλες τις περιπτώσεις και έχει σχετικά λίγες τιμές, μπορείς να φτιάξεις ένα select που θα επιστρέφει μία ειδική τιμή για κάθε συνδυασμό. Μετά κάνεις group με τα κλειδιά ΚΑΙ το νέο πεδίο, πχ.

    LEFT JOIN 
         ( SELECT key1, key2, key3,InstrumentType,SUM(p.POSO)
               FROM
               (SELECT key1, key2, key3, p.POSO,
                      (CASE WHEN T1.ID_XX IN (1,2,3) THEN 'Bond'
                        WHEN T1.ID_XX IN (4,5,6) THEN 'Stock'
                          ...
                      ) AS InstrumentType
                 FROM T1) AS PricesPerType
                 GROUP BY key1, key2, key3, InstrumentType ) AS DailyPrices
    ON DailyPrices.Key1=L.Key1 ...

    Όπως βλέπεις, υποθέτω ότι μιλάμε για χρηματιστηριακά έτσι για πλάκα.

    Αν τώρα οι διάφορες τιμές είναι πολλές, και για να έχεις 258 επαναλήψεις μάλλον είναι, μπορείς να φτιάξεις ένα lookup πίνακα ο οποίος ως κλειδί θα περιέχει την τιμή του ID_XX και δεύτερο πεδίο το InstrumentType στο οποίο αντιστοιχεί. Έτσι, αντί για το CASE WHEN θα κάνεις ένα join μεταξύ T1 και Lookup1 για να πάρεις την τιμή του InstrumentType και μετά θα κάνεις πάλι group στα key1,2,3 και InstrumentType

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-02-2011, 18:39 63779 σε απάντηση της 63777

    Απ: The maximum number of tables in a query (260) was exceeded.

    Οχι 258 αλλά αρκετές φορές πχ περίπου 30 . Απο την άλλη υπάρχουν κ άλλοι αρκετοι πίνακες όπου τελικά το ξεπερνά το όριο. Θα δω την λύση που μου προτείνες κάτι τέτοιο σκεφτόμουνα.
    Υ.Γ Δεν είναι για χρηματιστηριακά χεχε σοβαρά δεν έχει σχέση με χρηματιστήριο ή χρηματιστηριακή εταιρεία.

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems